/*
 * Copyright 2017 Alexander Pustovalov
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { fork, take, call, put } from 'redux-saga/effects';
import * as spinnerActions from 'modules/app/containers/AppSpinner/actions';
import * as messageActions from 'modules/app/containers/AppMessage/actions';
import * as libraryPanelActions from 'modules/workspace/containers/LibraryPanel/actions';
import * as actions from './actions.js';
import { serverApi } from 'api';

function* saveComponentDefaults(){
	while(true){
		const {payload: {componentName, namespace, defaults}} = yield take(actions.SAVE_COMPONENT_DEFAULTS);
		yield put(spinnerActions.started('Saving component models'));
		try {
			yield call(serverApi.writeComponentDefaults, componentName, namespace, defaults);
			yield put(libraryPanelActions.loadComponents());
			yield put(actions.hideModal());
			yield put(messageActions.success('Component models were successfully saved. Check the available component list.'));
		} catch(error) {
			yield put(messageActions.failed('Saving component models has an error. ' + (error.message ? error.message : error)));
		}
		yield put(spinnerActions.done('Saving component models'));
	}
}

// main saga
export default function* mainSaga() {
	yield fork(saveComponentDefaults);
};